#ifndef BOARD_H_
#define BOARD_H_

#include <gtkmm.h>
#include <list>
#include <map>
#include <string>
#include <utility>

#include "Candy.h"

class Board: public Gtk::Fixed {
  public:
    Board();
    ~Board();
	
	/* Genera el dibujo del tablero con el tamaño indicado */
    void setBoardSize(int cantFilas, int cantColumnas);
    
	/* Devuelve el mapa de imágenes colocadas en el tablero */
	std::map<std::pair<int, int>, Candy *>* getImagenes();
	
	/* Setea las imágenes pasadas y las agrega al tablero */
	void setImagenes(std::map<std::pair<int, int>, Candy *>* imagenes);

  protected:
    std::vector<Gtk::TargetEntry> targetList;
    std::map<std::pair<int, int>, Candy *> imagenes;

    int width;
    int height;

	int cantFilas;
	int cantColumnas;
	
    /* Señal para manejar los elementos soltados dentro del tablero */
    void dropItem(const Glib::RefPtr<Gdk::DragContext> &context, int x, int y,
                  const Gtk::SelectionData &selection_data, guint info, 
                  guint time);

    
	/* Mapeo de coordenadas cartesianas a posiciones en el tablero */
    void mapCoordinates(int x, int y, int &fila, int &columna);
	
	/* Mapeo de posiciones en el tablero a coordenadas cartesianas */
	void mapPosition(int &x, int &y, int fila, int columna);
	
	/* Agrega un caramelo al tablero en la posicion indicada */
    void addCandy(Candy *, int x, int y, bool cargando);
};

#endif
